package leetcode_周赛._2022._202203;

/**
 * @author yzh
 * @version 1.0
 * @date 2022/3/27 10:53
 * ac 两题
 * 这两周的算法题跟之前比难度上升，模拟题不好模拟，需要更多的思考
 */
public class _27 {
    public static void main(String[] args) {
        System.out.println(new _27().minDeletion(new int[]{1, 1, 2, 3, 5}));
    }

    /**
     * 5236. 美化数组的最少删除数
     * 算法：贪心
     * @param nums nums
     * @return int
     */
    public int minDeletion(int[] nums) {
        int len = nums.length;
        if (len == 0) return 0;
        int ans = 0;
        for (int i = 0; i < len; ) {
            int j = i + 1;
            while (j < len && nums[j] == nums[j - 1]) ++j;
            if (j != i + 1) {
                ans += j - i - 1;
                i = j + 1;
            } else i += 2;
        }
        if ((len - ans) % 2 != 0) ++ans;
        return ans;
    }

    /**
     * 5253. 找到指定长度的回文数
     * 算法：模拟
     * 左右两部分
     * @param queries   queries
     * @param intLength intLength
     * @return long[]
     */
    public long[] kthPalindrome(int[] queries, int intLength) {
        int len = queries.length;
        long[] ans = new long[len];
        // p 是左边部分的最小值，max 是最大值
        // k 是向上取整，先算出左边的数，然后再右边的
        int p = 1, k = (intLength + 1) / 2, max, right = k;
        if (intLength % 2 != 0) --right;
        for (int i = 0; i < k - 1; i++) p *= 10;
        max = 9 * p;
        for (int i = 0; i < len; i++) {
            int query = queries[i];
            if (query > max) ans[i] = -1;
            else {
                long res = p + query - 1;
                String tmp = res + "";
                for (int j = right - 1; j >= 0; j--) res = 10 * res + tmp.charAt(j) - '0';
                ans[i] = res;
            }
        }
        return ans;
    }

}
